//
// Description: 91. 最短Hamilton路径
// Created by Loading on 2022/6/4.
//

#include <bits/stdc++.h>

using namespace std;

constexpr int N = 20, M = 1 << 20;

int w[N][N];
// dp[i][j] 表示 i 状态下 0~j 的最短Hamilton路径
/* 状态 i 为二进制，例如：111001，表示 0,3,4,5走过，1,2未走过 */
int dp[M][N];

/* 状压DP */
int main() {
    int n;
    cin >> n;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            cin >> w[i][j];
        }
    }

    memset(dp, 0x3f, sizeof dp);
    // 起始状态为 0
    dp[1][0] = 0;
    for (int i = 0; i < 1 << n; ++i) {
        for (int j = 0; j < n; ++j) {
            // i 状态一定要包含 j 点才可继续
            if (i >> j & 1) {
                // 遍历状态转移点
                for (int k = 0; k < n; ++k) {
                    // 状态需要包含状态转移点 k
                    if ((i - (1 << j)) >> k & 1) {
                        // 0~k（不能包含 j） + k~j 更新最短距离
                        dp[i][j] = min(dp[i][j], dp[i - (1 << j)][k] + w[k][j]);
                    }
                }
            }
        }
    }

    // 结果为满状态下，走到 n - 1 这个点的 dp 值
    cout << dp[(1 << n) - 1][n - 1] << endl;

    return 0;
}